package com.itheima.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.dao.PermissionDao;
import com.itheima.dao.RoleDao;
import com.itheima.dao.UserDao;
import com.itheima.entity.PageResult;
import com.itheima.entity.QueryPageBean;
import com.itheima.pojo.Menu;
import com.itheima.pojo.Permission;
import com.itheima.pojo.Role;
import com.itheima.pojo.User;
import com.itheima.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @Author : wangjie
* @CreateDate : 2020/3/26 17:01
* @Version : 1.0
* @Description : 测试:用户表现层接口实现类
*/
@Service
@Transactional
public class UserServiceImpl implements UserService {

    //依赖注入userdao
    @Autowired
    private UserDao userDao;
    //依赖注入RoleDao
    @Autowired
    private RoleDao roleDao;
    //依赖注入PermissionDao
    @Autowired
    private PermissionDao permissionDao;

    /**
     * 用户登录
     * @param username
     * @param password
     * @return
     */
    @Override
    public boolean login(String username, String password) {
        //打印用户名和密码
        System.out.println("provider:username="+username+",password="+password);
        //模拟输入登录信息 测试
        if ("zhangsan".equals(username)&&"123".equals(password)){
            return true;
        }
        return false;
    }

    @Override
    public User findByUserName(String username) {
        //根据用户名获取user对象,调用userdao中的方法
        User user= userDao.findByUserName(username);
        //调用Roledao中的方法根据用户ID 获取角色信息
        if(user!=null){
        Set<Role> roleSet= roleDao.findByUserId(user.getId());
        //将所有的角色信息封装到user对象中
        user.setRoles(roleSet);
        //遍历set集合 获取每个角色信息
        for (Role role : roleSet) {
            //调用Perssiondao中的方法 根据角色ID获取权限信息
            Set<Permission> permissionSet= permissionDao.findByRoleId(role.getId());
            role.setPermissions(permissionSet);
        }}
        return user;
    }


    /*动态获取显示菜单数据
    * 孙艺
    * */
    @Override
    public List<Menu> getMenuList(String username) {
        /*根据用户名查询对应角色信息ID*/
        List<Integer> roleIds = userDao.getRoleId(username);

        /*根据角色id查询中间表菜单id*/
        List<Integer> MenuId = userDao.findRoleAndMenuId(roleIds);

        /*根据菜单id查询对应的主菜单菜单数据*/
        List<Menu> menuList = userDao.getMenuList(MenuId);

        /*根据主菜单id查询子菜单*/
        for (Menu menu : menuList) {
            /**/
            List<Menu> children = userDao.getChildren(menu.getId());
            menu.setChildren(children);
        }
        /*返回对象*/
        return menuList;
    }
    /**
    * @Author : wangjie
    * @CreateDate : 2020/4/15 14:11
    * @Version : 1.0
    * @Description : 条件查询,新增用户,编辑,删除
    */
    @Override
    public PageResult queryPage(QueryPageBean pageBean) {
        //pageHelper插件
        PageHelper.startPage(pageBean.getCurrentPage(),pageBean.getPageSize());
        Page<User> page= userDao.findByCondition(pageBean.getQueryString());
        return new PageResult(page.getTotal(),page.getResult());
    }

    @Override
    public void add(User user) {
        userDao.add(user);
    }

    @Override
    public User findById(Integer id) {
        User user= userDao.findById(id);
        return user;
    }

    @Override
    public void edit(User user) {
        userDao.edit(user);
    }

    @Override
    public void deleteById(Integer id) {
        //删除中间表数据
        userDao.deleteById(id);
        userDao.deleteUser(id);
    }
}
